package dominio;

import java.util.ArrayList;

/**
 * Esta Clase es el Controlador de Ranking, en el se administran
 * los diferentes rankings del juego.
 * @author victor
 *
 */

public class CtrlRanking{

	ArrayList<RankingCpus> cpus;
	ArrayList<RankingUsers> users;
	ArrayList<RankingCpusers> cpusers;
	

	public CtrlRanking() {
		cpus = new ArrayList<RankingCpus>();
		users = new ArrayList<RankingUsers>();
		cpusers = new ArrayList<RankingCpusers>();
	}
	
	
	/** 
	 * Aquesta funció rep les dades d'una cpu guanyadora que s'ha
	 * enfrontat contra una altra i el record queda enmagatzemat
	 * per ordre a la llista de redcords del Cpus
	 * @param nom
	 * @param punts
	 * @param temps
	 * @param nivelladv
	 * @param nivellprop
	 */
	
	public void addRecordCpus(String nom, int punts, int temps, int nivelladv, int nivellprop) {
		RankingCpus rc;
		rc = new RankingCpus(nom,punts,temps,nivelladv,nivellprop);
		int n = cpus.size();
		for (int i = 0; i<n ;i++){
			RankingCpus aux;
			aux = cpus.get(i);

			if ((aux.getNivelladv() < rc.getNivelladv()) || 
					(aux.getNivelladv() == rc.getNivelladv() && aux.getPunts() < rc.getPunts()) || 
					(aux.getNivelladv() == rc.getNivelladv() && aux.getPunts() == rc.getPunts() && aux.getTemps() >= rc.getPunts())){
				this.cpus.add(i,rc);
			}
			else cpus.add(rc);
		}
	}
	
	/** 
	 * Aquesta funció rep les dades d'un jugador humà guanyador que 
	 * s'ha enfrontat amb un alrte jugador humà i el seu record queda
	 * enmagatzemat per ordre a la llista de records dels Users.
	 * @param nom
	 * @param punts
	 * @param temps
	 */
	
	public void addRecordUsers(String nom, int punts, int temps) {
		RankingUsers ru;
		ru = new RankingUsers(nom,punts,temps);
		int n = users.size();
		for (int i = 0; i<n ;i++){
			RankingUsers aux;
			aux = users.get(i);
			
			if ((aux.getPunts() < ru.getPunts()) || 
					(aux.getPunts() == ru.getPunts() && aux.getTemps() > ru.getTemps())){
				this.users.add(i,ru);
			}
			else users.add(ru);
		}
	}
	
	/** 
	 * Aquesta funció rep les dades d'un jugador humà guanyador que 
	 * s'ha enfrontat amb un jugador cpu i el seu record queda
	 * enmagatzemat per ordre a la llista de records dels Users.
	 * @param nom
	 * @param punts
	 * @param temps
	 * @param nivell
	 */
	
	public void addRecordCpusers(String nom, int punts, int temps, int nivell) {
		RankingCpusers rcu;
		rcu = new RankingCpusers(nom,punts,temps, nivell);
		int n = users.size();
		for (int i = 0; i<n ;i++){
			RankingCpusers aux;
			aux = cpusers.get(i);
			
			if ((aux.getNivell() < rcu.getNivell()) || 
					((aux.getNivell() == rcu.getNivell()) && (aux.getPunts() < rcu.getPunts())) || 
					((aux.getNivell() == rcu.getNivell()) && (aux.getPunts() == rcu.getPunts()) && aux.getTemps() < rcu.getTemps())){
				this.cpusers.add(i,rcu);
			}
			else cpusers.add(rcu);
		}
	}

}

